﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace KgUtils.Collections
{
    public static partial class ICollectionExtension
    {
        ///// <summary>
        ///// Indique si une collection est nulle ou vide
        ///// </summary>
        ///// <param name="collection">La collection à tester</param>
        ///// <returns>true si la collection est nulle ou vide, false sinon</returns>
        //public static bool IsNullOrEmpty(this ICollection collection)
        //{
        //    return (collection == null || collection.Count == 0);
        //}

        ///// <summary>
        ///// Indique si une collection est nulle ou vide
        ///// </summary>
        ///// <param name="collection">La collection à tester</param>
        ///// <returns>true si la collection est nulle ou vide, false sinon</returns>
        //public static bool IsNullOrEmpty<TColl>(this ICollection<TColl> collection)
        //{
        //    return (collection == null || !collection.Any());
        //}

        #region Sort
        /// <summary>
        /// Méthode d'extension permettant de trier une ObservableCollection sans créer de nouvel objet.
        /// </summary>
        /// <typeparam name="TSource">Le type des éléments de la liste à trier.</typeparam>
        /// <typeparam name="TKey">Le type de la clé à utiliser pour trier.</typeparam>
        /// <param name="source">La collection à trier.</param>
        /// <param name="keySelector">Le sélecteur permettant de déterminer à la clé à utiliser pour le tri.</param>
        public static void Sort<TSource, TKey>(this ICollection<TSource> source, Func<TSource, TKey> keySelector)
        {
            List<TSource> sortedList = source.OrderBy(keySelector).ToList();
            source.Clear();
            foreach (var sortedItem in sortedList)
                source.Add(sortedItem);
        }
        #endregion
    }
}
